/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo.regresion;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Carlos
 */
public class TablaRegresion {

    private String nombre_tabla;
    private Float acumulado_pesos;
    private Float acumumulado_individuos;
    private List<Float> pesos;
    private List<Integer> cant_individuos;

    public TablaRegresion(String nom) {
        this.nombre_tabla = nom;
        this.pesos = new ArrayList<>();
        this.cant_individuos = new ArrayList<>();
        this.acumulado_pesos = new Float(0.0);
        this.acumumulado_individuos = new Float(0.0);
    }

    public String getNombre_tabla() {
        return nombre_tabla;
    }

    public Float getAcumulado_pesos() {
        return acumulado_pesos;
    }

    public Float getPromedioPesos() {
        return acumulado_pesos / pesos.size();
    }

    public Float getPromedioIndividuos() {
        return acumumulado_individuos / cant_individuos.size();
    }

    public Float getAcumumulado_individuos() {
        return acumumulado_individuos;
    }

    public void setNombre_tabla(String nombre_tabla) {
        this.nombre_tabla = nombre_tabla;
    }

    public List<Float> getPesos() {
        return pesos;
    }

    public void setPesos(List<Float> pesos) {
        this.pesos = pesos;
    }

    public List<Integer> getCant_individuos() {
        return cant_individuos;
    }

    public void setCant_individuos(List<Integer> cant_individuos) {
        this.cant_individuos = cant_individuos;
    }

    public void addPeso(float peso) {
        acumulado_pesos += peso;
        pesos.add(peso);
    }

    public void addCantIndividuos(int cantIndividuos) {
        acumumulado_individuos += cantIndividuos;
        cant_individuos.add(cantIndividuos);
    }

    public Float varianza() {
        Float varianza = new Float(0.0);
        Float promInd = getPromedioIndividuos();
        for (int i = 0; i < cant_individuos.size(); i++) {
            varianza += cant_individuos.get(i) - promInd;
        }
        if (varianza != 0) {
            System.err.println(varianza);
        }
        Float a = varianza / cant_individuos.size();
        return varianza == 0 ? 0 : a;
    }

    public Float variableA() {
        Float variable = new Float(0.0);
        Float promInd = getPromedioIndividuos();
        Float promPes = getPromedioPesos();
        for (int i = 0; i < cant_individuos.size(); i++) {
            variable += (cant_individuos.get(i) - promInd) * (pesos.get(i) - promPes);
        }
        Float deno = cant_individuos.size() * varianza();

        return deno == 0 ? 0 : variable / deno;
    }

    public Float variableB() {
        Float variable = getPromedioPesos() - (variableA() * getPromedioIndividuos());
        return variable;
    }

    public Float funcion() {
        Float acumuladoTabla = new Float(0.0);
        acumuladoTabla = variableA() * getPromedioIndividuos() + variableB();
        return acumuladoTabla;
    }
}
